package com.dianrong.common.uniauth.server.datafilter.impl;

import com.dianrong.common.uniauth.server.datafilter.DataFilter;
import com.dianrong.common.uniauth.server.datafilter.FieldType;
import com.dianrong.common.uniauth.server.datafilter.FilterData;
import com.dianrong.common.uniauth.server.datafilter.FilterType;

/**
 * . 该抽象方法主要是加入了数据校验的开关-- dataFilterSwitch
 * @author wanglin
 */
public abstract class AbstractDataFilter  implements DataFilter {
	/**
	 * . 数据过滤的开关变量
	 */
	private boolean dataFilterSwitch = true;

	@Override
	public void addFieldCheck(FilterType ftype, FieldType type, Object fieldValue) {
		addFieldsCheck(ftype, FilterData.buildFilterData(type, fieldValue));
	}
	
	@Override
	public void updateFieldCheck(Integer id, FieldType type, Object fieldValue) {
		updateFieldsCheck(id, FilterData.buildFilterData(type, fieldValue));
	}
	
	/**
	 * . 数据过滤并且伴随字段相等的情况。
	 * 
	 * @param ftype
	 *            过滤的方式
	 * @param equalsField
	 *            比较的字段以及值
	 */
	@Override
	public void addFieldsCheck(FilterType ftype, FilterData... equalsField) {
		if (!isDataFilterSwitch()) {
			return;
		}
		doAddFieldsCheck(ftype, equalsField);
	}

	/**
	 * . 判断数据是否重复并且伴随字段相等的情况。
	 * 
	 * @param id
	 *            keyid
	 * @param equalsField
	 *            比较的字段以及值
	 */
	@Override
	public void updateFieldsCheck(Integer id, FilterData... equalsField) {
		if (!isDataFilterSwitch()) {
			return;
		}
		doUpdateFieldsCheck(id, equalsField);
	}

	/**
	 * . addFieldsCheck 的委托方法
	 * @param ftype
	 *            过滤的方式
	 * @param equalsField
	 *            需要比较的字段以及值
	 */
	protected abstract void doAddFieldsCheck(FilterType ftype, FilterData... equalsField);

	/**
	 * . updateFieldsCheck的委托方法
	 * 
	 * @param id
	 *            keyid
	 * @param equalsField
	 *            需要比较的字段以及值
	 */
	protected abstract void doUpdateFieldsCheck(Integer id, FilterData... equalsField);

	public boolean isDataFilterSwitch() {
		return dataFilterSwitch;
	}

	public void setDataFilterSwitch(boolean dataFilterSwitch) {
		this.dataFilterSwitch = dataFilterSwitch;
	}
}
